Alfred の Google Suggest を日本語モードにする

Alfred の Google Suggest を日本語モードにする

Clock Icon2014.12.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Alfred の Google Suggest

言わずと知れた Mac の ランチャーアプリ Alfred
(公式では "Alfred is a keyboard-driven productivity application," と書かれている)

このアプリの Powerpack を購入することで利用できる Workflows の中には Google Suggest の Example が存在します。
しかしこの Google Suggest はデフォルト設定でアメリカ用になっているため、検索ワードを入力しても日本の Google ホームページでの入力時と同じ入力候補が返ってきません。
というわけで、この Google Suggest の設定を日本用にカスタマイズします。

実行画面

Before

alfred1

After

alfred2

設定

以下のコードを Script: に記述します。

require_once('workflows.php');
$wf = new Workflows();

$orig = "{query}";
$xml = $wf->request( "http://www.google.co.jp/complete/search?hl=ja&ie=utf_8&oe=utf_8&output=toolbar&q=".urlencode( $orig ) );
$xml = simplexml_load_string( $xml );
$int = 1;

foreach( $xml as $sugg ):
	$data = $sugg->suggestion->attributes()->data;
    $wf->result( $int.'.'.time(), "$data", "$data", 'Search Google for '.$data, 'icon.png'  );
	$int++;
endforeach;

$results = $wf->results();
if ( count( $results ) == 0 ):
	$wf->result( 'googlesuggest', $orig, 'No Suggestions', 'No search suggestions found. Search Google for '.$orig, 'icon.png' );
endif;

echo $wf->toxml();

おわり

解説

デフォルトのコードから変更した部分は、5 行目と 6 行目だけです。

Before

$xml = $wf->request( "http://google.com/complete/search?output=toolbar&q=".urlencode( $orig ) );
$xml = simplexml_load_string( utf8_encode($xml) );

After

$xml = $wf->request( "http://www.google.co.jp/complete/search?hl=ja&ie=utf_8&oe=utf_8&output=toolbar&q=".urlencode( $orig ) );
$xml = simplexml_load_string( $xml );

1. ドメインを変更

google.comwww.google.co.jp

2. Google Suggest API にパラメータを追加

  • hl : 言語
  • ie : Input Encoding
  • oe : Output Encoding

hl には「日本語」を、ie, oe には共に「utf8」を指定しています。

3. 取得した xml に対して utf8_encode() を実行しない

simplexml_load_string( utf8_encode($xml) );simplexml_load_string( $xml );

そもそもなぜ API のレスポンスに対してエンコードを実行しているのかが私にはわかりません。
utf8_encode() を実行したままにすると文字化けします。

以上

快適な Alfred ライフをお楽しみください。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.